package org.example.chain_of_responsibility_pattern;

// 1. 定义抽象处理者（Handler）
public abstract class Handler {
  // 下一个处理者
  protected Handler nextHandler;

  // 设置下一个处理者（形成链式结构）
  public Handler setNext(Handler nextHandler) {
    this.nextHandler = nextHandler;
    // 支持链式调用（如 h1.setNext(h2).setNext(h3)）
    return nextHandler;
  }

  // 处理请求的抽象方法（由具体子类实现）
  public abstract void handleRequest(Request request);
}
// 2. 定义请求对象（包含需要处理的数据）
class Request {
  // 请求类型（如审批金额级别）
  private String type;
  private String content;

  public Request(String type, String content) {
    this.type = type;
    this.content = content;
  }

  public String getType() { return type; }
  public String getContent() { return content; }
}

// 3. 具体处理者（Concrete Handlers）
// 处理者A：处理级别为 "LOW" 的请求
class LowLevelHandler extends Handler {
  @Override
  public void handleRequest(Request request) {
    if ("LOW".equals(request.getType())) {
      System.out.println("LowLevelHandler 处理请求: " + request.getContent());
    } else if (nextHandler != null) {  // 无法处理，转交下一个处理者
      nextHandler.handleRequest(request);
    } else {
      System.out.println("无处理者能处理此请求: " + request.getContent());
    }
  }
}

// 处理者B：处理级别为 "MEDIUM" 的请求
class MediumLevelHandler extends Handler {
  @Override
  public void handleRequest(Request request) {
    if ("MEDIUM".equals(request.getType())) {
      System.out.println("MediumLevelHandler 处理请求: " + request.getContent());
    } else if (nextHandler != null) {
      nextHandler.handleRequest(request);
    } else {
      System.out.println("无处理者能处理此请求: " + request.getContent());
    }
  }
}

// 处理者C：处理级别为 "HIGH" 的请求
class HighLevelHandler extends Handler {
  @Override
  public void handleRequest(Request request) {
    if ("HIGH".equals(request.getType())) {
      System.out.println("HighLevelHandler 处理请求: " + request.getContent());
    } else if (nextHandler != null) {
      nextHandler.handleRequest(request);
    } else {
      System.out.println("无处理者能处理此请求: " + request.getContent());
    }
  }
}
